package com.huizhonglm.diap.core.storage.db;

import org.xutils.DbManager;
import org.xutils.x;

/**
 * 公共数据库操作类
 *
 * @author LiXiaoLong
 * @version 1.0
 * @since 2016-03-01 16:44
 */
public class DBHelper implements DbManager.DbOpenListener, DbManager.DbUpgradeListener {
	/**
	 * 用户数据库名字
	 */
	private static final String DATABASE_NAME = "diap_client.db";
	/**
	 * 用户数据库版本号
	 */
	private static final int DATABASE_VERSION = 1;

	public DbManager db;

	private static volatile DBHelper instance = null;

	private DBHelper() {
		DbManager.DaoConfig daoConfig = new DbManager.DaoConfig()
				.setDbName(DATABASE_NAME)
				.setDbVersion(DATABASE_VERSION)
				.setDbOpenListener(this)
				.setDbUpgradeListener(this);
		db = x.getDb(daoConfig);
	}

	/**
	 * 单一实例
	 */
	public static DBHelper getInstance() {
		if (instance == null) {
			synchronized (DBHelper.class) {
				if (instance == null) {
					instance = new DBHelper();
				}
			}
		}
		return instance;
	}

	@Override
	public void onDbOpened(DbManager db) {
		// 开启WAL, 对写入加速提升巨大
		db.getDatabase().enableWriteAheadLogging();
	}

	@Override
	public void onUpgrade(DbManager db, int oldVersion, int newVersion) {
	}

//	public void dropTable(Class<?> entityType) {
//		try {
//			mDBUtils.dropTable(entityType);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 *
//	 * 批量执行sql插入数据
//	 *
//	 * @author liuyun
//	 * @param sqls
//	 * @throws DbException
//	 * @since v0.1
//	 */
//	public void execNonQueryWithInsert(List<String> sqls) throws DbException {
//		mDBUtils.getDatabase().beginTransaction();
//		for (String sql : sqls) {
//			if (!TextUtils.isEmpty(sql) && sql.startsWith("INSERT")) {
//				mDBUtils.execNonQuery(sql);
//			}
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//	}
//
//	/**
//	 *
//	 * 批量执行sql删除数据
//	 *
//	 * @author liuyun
//	 * @param sqls
//	 * @throws DbException
//	 * @since v0.1
//	 */
//	public void execNonQueryWithDelete(List<String> sqls) throws DbException {
//		mDBUtils.getDatabase().beginTransaction();
//		for (String sql : sqls) {
//			if (!TextUtils.isEmpty(sql) && sql.startsWith("DELETE")) {
//				mDBUtils.execNonQuery(sql);
//			}
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//	}
//
//	public void close() {
//		mDBUtils.close();
//	}
//
//	/**
//	 * 删除单条信息
//	 *
//	 * @author StoneJxn
//	 * @param <T>
//	 * @param entity
//	 *            对应数据库实体类中的 model
//	 * @since v0.0.1
//	 */
//	public <T> void deleteData(T entity) {
//		try {
//			mDBUtils.delete(entity);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 删除多条数据信息
//	 *
//	 * @author StoneJxn
//	 * @param <T>
//	 * @param entities
//	 * @since v0.0.1
//	 */
//	public <T> void deleteAll(List<T> entities) {
//		try {
//			mDBUtils.deleteAll(entities);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 删除所有表里的数据
//	 *
//	 * @author StoneJxn
//	 * @param <T>
//	 * @param <T>
//	 * @param entity
//	 *            对应数据库实体类中的 model.class
//	 * @since v0.0.1
//	 */
//	public <T> void deleteDataAll(T entity) {
//		try {
//			mDBUtils.deleteAll(entity.getClass());
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//	}
//
//	/**
//	 * 查询所有表里的数据
//	 *
//	 * @author StoneJxn
//	 * @param <T>
//	 * @param entity
//	 * @return
//	 * @since v0.0.1
//	 */
//	public <T> List<T> findAll(T entity) {
//		mDBUtils.getDatabase().beginTransaction();
//		List<T> entities = null;
//		try {
//			entities = mDBUtils.findAll(Selector.from(entity.getClass()));
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//		return entities;
//	}
//
//	/**
//	 * 根据数据库字段名对应的值模糊查询数据对象
//	 *
//	 * @param <T>
//	 * @param <T>
//	 * @param findKey
//	 * @param findValue
//	 * @return
//	 */
//	public <T> List<T> findByKeyValue(T entity, String findKey, String findValue) {
//		List<T> entities = new ArrayList<>();
//		try {
//			entities = mDBUtils.findAll(Selector.from(entity.getClass()).where(WhereBuilder.b(findKey, "like", findValue + "%")));
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//		return entities;
//	}
//
//	/**
//	 * 插入数据
//	 * @param <T> entity type.
//	 * @param entities
//	 *            entity's list for insert.
//	 */
//	public <T> void insertData(List<T> entities) {
//		mDBUtils.getDatabase().beginTransaction();
//		try {
//			mDBUtils.saveAll(entities);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//	}
//
//	/**
//	 * 插入数据
//	 * @param <T> entity type.
//	 * @param entity entity for insert.
//	 */
//	public <T> void insertData(T entity) {
//		mDBUtils.getDatabase().beginTransaction();
//		try {
//			mDBUtils.save(entity);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//	}
//
//	/**
//	 *
//	 * 插入或者更新数据
//	 *
//	 * @param <T> entity type.
//	 * @param entity entity for insert or update.
//	 */
//	public <T> void insertOrUpdate(T entity) {
//		mDBUtils.getDatabase().beginTransaction();
//		try {
//			mDBUtils.saveOrUpdate(entity);
//		} catch (DbException e) {
//			e.printStackTrace();
//		}
//		mDBUtils.getDatabase().setTransactionSuccessful();
//		mDBUtils.getDatabase().endTransaction();
//	}

}
